﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BolsaWeb.Dominio;
using BolsaWeb.Negocio;
using BolsaWeb.Persistencia;
using System.Security;
namespace BolsaWeb.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        BolsaTrabajoService BolsaTrabajoService { get; set; }
        SeguridadService SeguridadService { get; set; }

        public ActionResult Index()
        {
            string tipo = "";
            ViewData["Message"] = "Bolsa de trabajo";
            ICollection<Aviso> model = BolsaTrabajoService.listarAvisos();
            if (Session[SeguridadService.SESSION_NAME] != null)
            {
                tipo = ((Usuario)Session[SeguridadService.SESSION_NAME]).Tipo;
                switch (tipo)
                {
                    case Usuario.POSTULANTE:
                        return View("IndexPostulante", model);
                    case Usuario.OFERTANTE:
                        return View("IndexOfertante", model);
                }
            }
            return View(model);
        }
        [HttpGet]
        public ActionResult Postular(int avisoId)
        {
            if (Session[SeguridadService.SESSION_NAME] != null)
            {
                Usuario user = ((Usuario)Session[SeguridadService.SESSION_NAME]);
                if (user.Tipo == Usuario.POSTULANTE)
                {
                    int postulanteId = user.Id;
                    try
                    {
                        BolsaTrabajoService.PostularAlAviso(postulanteId, avisoId);
                        ViewData["Mensaje"] = "Postulante ha sido registrado al aviso satisfactoriamente";
                        return View();
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError(String.Empty, ex.Message);
                        return View();
                    }
                }
                else
                {
                    return RedirectToAction("Create", "Postulante");
                }
            }
            else
            {
                return RedirectToAction("Create", "Postulante");
            }
        }
        [HttpGet]
        public ActionResult Seleccionar(int idAviso)
        {
            if (Session[SeguridadService.SESSION_NAME] != null)
            {
                Usuario user = ((Usuario)Session[SeguridadService.SESSION_NAME]);
                if (user.Tipo == Usuario.OFERTANTE)
                {
                    int ofertanteId = user.Id;
                    try
                    {
                        ViewData["idAviso"] = idAviso;
                        return View(BolsaTrabajoService.listarPostulantes(idAviso));
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError(String.Empty, ex.Message);
                        return View();
                    }
                }
                else
                {
                    return RedirectToAction("Create", "Ofertante");
                }
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        [HttpPost]
        public ActionResult Seleccionar(int idAviso, FormCollection frm)
        {
            if (Session[SeguridadService.SESSION_NAME] != null)
            {
                Usuario user = ((Usuario)Session[SeguridadService.SESSION_NAME]);
                if (user.Tipo == Usuario.OFERTANTE)
                {
                    int postulanteId = Int32.Parse(frm["PostulanteId"]);
                    try
                    {
                        BolsaTrabajoService.seleccionarGanador(idAviso, postulanteId);
                        return RedirectToAction("Index", "Home");
                    }
                    catch (Exception ex)
                    {
                        ModelState.AddModelError(String.Empty, ex.Message);
                        return View();
                    }
                }
                else
                {
                    return RedirectToAction("Create", "Ofertante");
                }
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        [HttpGet]
        public ActionResult CrearAviso()
        {
            return View();
        }
        [HttpPost]
        public ActionResult CrearAviso(Aviso frmAviso)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    int idOf = ((Usuario)Session[SeguridadService.SESSION_NAME]).Id;
                    BolsaTrabajoService.crearAviso(
                        frmAviso.Titulo,
                        frmAviso.Puesto,
                        idOf,
                        frmAviso.FechaInicio,
                        frmAviso.FechaTermino
                      );
                    return RedirectToAction("Index");
                }
                return View();
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                return View();
            }
        }
    }
}
